import java.util.concurrent.Callable;
//继承的概念，专门用来进行共性抽取，实现代码复用。

class Animals{//把两者共有属性进行抽象出来，并创建了一个类
    public String name;
    public int age;
    public String color;

    public void eat(){
        System.out.println(this.name + "正在吃饭");
    }
}

//extends就是继承

class Dog extends Animals{
//    public String name;
//    public int age;
//    public String color;

//    public void eat(){
//        System.out.println(this.name + "正在吃饭");
//    }

    //这个属于Dog类的新特性
    public void wangWang(){
        System.out.println(this.name + "正在狗叫！");
    }
}
class Cat extends Animals{
//    public String name;
//    public int age;
//    public String color;


//    public void eat(){
//        System.out.println(this.name + "正在吃饭");
//    }


    public void miMi(){
        System.out.println(this.name + "正在喵喵叫！");
    }
}
public class TestDemo {
    //继承与多态
    //继承(inheritance)机制：是面向对象程序设计使代码可以复用的最重要的手段，它允许程序员在保持原有类特 性
    //的基础上进行扩展，增加新功能，这样产生新的类，称派生类。、
    //共性的抽取，实现代码复用
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.name = "wby";
        dog.eat();
        dog.wangWang();
        System.out.println("======================");
        Cat cat = new Cat();
        cat.name = "zzx";
        cat.eat();
        cat.miMi();
    }

    //两个类的属性：name,age,color,包括一个的eat方法都是相当于共有的属性
    //那么我把两者共有的部分再把它们进行抽象成了一个类
    //通过某些关键字来建立关系，从减少了重复性

    //extends就是继承
    //Dog,Cat是子类，也叫做派生类
    //Animals是父类，也叫做超类，还有叫做基类
    //子类继承父类之后，会继承了父类的成员方法和成员变量
    //但是父类中的静态成员变量和方法不会被继承
    //因为静态不属于对象，随着父类的加载，只执行了一次，就不再执行了，所以静态的不会被继承

    //这么做我们可以达到了代码的复用

    //父类是子类的共性而抽象的出来类

    //继承的语法、
    //在Java中如果要表示类之间的继承关系，需要借助extends关键字，
//    修饰符 class 子类 extends 父类 {
//        //···
//    }
    //注意：
    //1. 子类会将父类中的成员变量或者成员方法继承到子类中了
    //2. 子类继承父类之后，必须要新添加自己特有的成员，体现出与基类的不同，否则就没有必要继承了

    //子类与父类的是一种事物，比如猫和狗都是动物，所以猫和狗类都与动物是一类
    //我们不建议不同种的事物采用继承；比如class Robot extends Animals,机器人与动物本质上两类的东西

}
